package talent.entity;

import jakarta.persistence.*;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 人才实体类，用于表示人才库中的候选人信息
 */
@Data
@Entity // 标注该类为 JPA 实体类
@Table(name = "talent_pool") // 指定映射的数据库表名为 talent_pool
public class Talent {

    /**
     * 唯一标识人才的主键 ID，由数据库自动生成
     */
    @Id // 标注该属性为主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键生成策略为数据库自增
    private Long id;

    /**
     * 候选人的姓名
     */
    private String name;

    /**
     * 候选人的性别，使用枚举类型确保数据的有效性和一致性
     */
    @Enumerated(EnumType.STRING) // 指定枚举类型以字符串形式存储在数据库中
    private Gender gender;

    /**
     * 候选人的出生日期
     */
    @Column(name = "birth_date") // 指定映射的数据库列名为 birth_date
    private LocalDate birthDate;

    /**
     * 候选人的联系电话
     */
    private String phone;

    /**
     * 候选人的头像 URL 或路径
     */
    private String avatar;

    /**
     * 候选人的学历等级，例如：1-小学、2-初中、3-高中、4-本科、5-硕士、6-博士等
     */
    @Column(name = "education_level")
    private Integer educationLevel;

    /**
     * 候选人参与过的项目数量
     */
    @Column(name = "project_count")
    private Integer projectCount;

    /**
     * 候选人的工作经验年限
     */
    @Column(name = "work_experience")
    private Integer workExperience;

    /**
     * 候选人毕业的大学名称
     */
    private String university;

    /**
     * 候选人的专业
     */
    private String major;

    /**
     * 候选人的技能列表，以 JSON 格式存储
     */
    @Column(columnDefinition = "json") // 指定该列的数据库类型为 JSON
    private String skills;

    /**
     * 候选人获得的奖项列表，以 JSON 格式存储
     */
    @Column(columnDefinition = "json")
    private String awards;

    /**
     * 候选人期望的职位
     */
    @Column(name = "desired_position")
    private String desiredPosition;

    /**
     * 候选人期望的薪资
     */
    @Column(name = "expected_salary")
    private Integer expectedSalary;

    /**
     * 候选人上次登录的时间
     */
    @Column(name = "last_login")
    private LocalDateTime lastLogin;

    /**
     * 候选人在平台发布的帖子数量
     */
    @Column(name = "posts_count")
    private Integer postsCount;

    /**
     * 候选人观看视频学习的总时长（单位：分钟）
     */
    @Column(name = "video_learning_duration")
    private Integer videoLearningDuration;

    /**
     * 候选人使用软件的总时长（单位：分钟）
     */
    @Column(name = "software_usage_duration")
    private Integer softwareUsageDuration;

    /**
     * 候选人计划的完成率（百分比）
     */
    @Column(name = "plan_completion_rate")
    private Integer planCompletionRate;

    /**
     * 记录创建时间，由 Hibernate 自动维护
     */
    @Column(name = "created_at")
    @CreationTimestamp // 标注该属性由 Hibernate 自动设置创建时间
    private LocalDateTime createdAt;

    /**
     * 记录最后更新时间，由 Hibernate 自动维护
     */
    @Column(name = "updated_at")
    @UpdateTimestamp // 标注该属性由 Hibernate 自动设置更新时间
    private LocalDateTime updatedAt;

    /**
     * 性别枚举，定义候选人的性别选项
     */
    public enum Gender {
        男, 女, 其他
    }
}